package com.shujia

object Demo17Implicit01 {
  // 1、隐式转换函数
  def func01(int: Int): Unit = {
    println(int + 100)
  }

  //  def str2Int(s: String): Int = {
  //    s.toInt
  //  }

  implicit def str2IntAuto(s: String): Int = {
    Integer.parseInt(s)
  }

  implicit def str2MyClass(name: String): MyClass = {
    new MyClass("01", name, 18)
  }

  def main(args: Array[String]): Unit = {
    /**
     * 隐式转换：动态给“对象”（函数、变量、类）增加方法
     */

    func01(10)
    func01(20)

    val str: String = "123"
    //    func01(str) // 由于func01需要接收一个Int类型的参数，直接传字符串，类型不匹配
    //    func01(str.toInt) // 手动调用toInt方法进行类型的转换
    //    func01(str2Int(str)) // 通过调用自定义的字符串转Int类型方法实现调用
    func01(str2IntAuto(str))
    func01(str) // 通过隐式转换自动调用
  }

}
